home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / boot / netBoot.new / if_ether.h < prev    next >
C/C++ Source or Header  |  1990-12-19  |  5KB  |  169 lines

  1. /*
  2.  * Copyright (c) 1982, 1986 Regents of the University of California.
  3.  * All rights reserved.  The Berkeley software License Agreement
  4.  * specifies the terms and conditions for redistribution.
  5.  *
  6.  *    @(#)if_ether.h 1.20 88/02/08 SMI; from UCB 7.1 6/5/86
  7.  */
  8.  
  9. #ifndef    _IF_ETHER_
  10. #define    _IF_ETHER_
  11.  
  12. /*
  13.  * The following include is for compatibility with SunOS 3.x and
  14.  * 4.3bsd.  Newly written programs should include it separately.
  15.  */
  16. #include "if_arp.h"
  17.  
  18. /*
  19.  * Ethernet address - 6 octets
  20.  */
  21. struct ether_addr {
  22.     u_char    ether_addr_octet[6];
  23. };
  24.  
  25. /*
  26.  * Structure of a 10Mb/s Ethernet header.
  27.  */
  28. struct    ether_header {
  29.     struct    ether_addr ether_dhost;
  30.     struct    ether_addr ether_shost;
  31.     u_short    ether_type;
  32. };
  33.  
  34. #define    ETHERTYPE_PUP        0x0200        /* PUP protocol */
  35. #define    ETHERTYPE_IP        0x0800        /* IP protocol */
  36. #define    ETHERTYPE_ARP        0x0806        /* Addr. resolution protocol */
  37. #define    ETHERTYPE_REVARP    0x8035        /* Reverse ARP */
  38.  
  39. /*
  40.  * The ETHERTYPE_NTRAILER packet types starting at ETHERTYPE_TRAIL have
  41.  * (type-ETHERTYPE_TRAIL)*512 bytes of data followed
  42.  * by an ETHER type (as given above) and then the (variable-length) header.
  43.  */
  44. #define    ETHERTYPE_TRAIL        0x1000        /* Trailer packet */
  45. #define    ETHERTYPE_NTRAILER    16
  46.  
  47. #define    ETHERMTU    1500
  48. #define    ETHERMIN    (60-14)
  49.  
  50. /*
  51.  * Ethernet Address Resolution Protocol.
  52.  *
  53.  * See RFC 826 for protocol description.  Structure below is adapted
  54.  * to resolving internet addresses.  Field names used correspond to
  55.  * RFC 826.
  56.  */
  57. struct    ether_arp {
  58.     struct    arphdr ea_hdr;        /* fixed-size header */
  59.     struct    ether_addr arp_sha;    /* sender hardware address */
  60.     u_char    arp_spa[4];        /* sender protocol address */
  61.     struct    ether_addr arp_tha;    /* target hardware address */
  62.     u_char    arp_tpa[4];        /* target protocol address */
  63. };
  64. #define    arp_hrd    ea_hdr.ar_hrd
  65. #define    arp_pro    ea_hdr.ar_pro
  66. #define    arp_hln    ea_hdr.ar_hln
  67. #define    arp_pln    ea_hdr.ar_pln
  68. #define    arp_op    ea_hdr.ar_op
  69.  
  70. /*
  71.  * Structure shared between the ethernet driver modules and
  72.  * the address resolution code.  For example, each ec_softc or il_softc
  73.  * begins with this structure.
  74.  *
  75.  * The structure contains a pointer to an array of multicast addresses.
  76.  * This pointer is NULL until the first successful SIOCADDMULTI ioctl
  77.  * is issued for the interface.
  78.  */
  79. #define    MCADDRMAX    64        /* multicast addr table length */
  80. struct    arpcom {
  81.     struct    ifnet ac_if;        /* network-visible interface */
  82.     struct    ether_addr ac_enaddr;    /* ethernet hardware address */
  83.     struct    in_addr ac_ipaddr;    /* copy of ip address- XXX */
  84.     struct    ether_addr *ac_mcaddr;    /* table of multicast addrs */
  85.     u_short    ac_nmcaddr;        /* count of M/C addrs in use */
  86. };
  87.  
  88. /*
  89.  * Internet to ethernet address resolution table.
  90.  */
  91. struct    arptab {
  92.     struct    in_addr at_iaddr;    /* internet address */
  93.     struct    ether_addr at_enaddr;    /* ethernet address */
  94.     u_char    at_timer;        /* minutes since last reference */
  95.     u_char    at_flags;        /* flags */
  96.     struct    mbuf *at_hold;        /* last packet until resolved/timeout */
  97. };
  98.  
  99. /*
  100.  * Compare two Ethernet addresses - assumes that the two given
  101.  * pointers can be referenced as shorts.  On architectures
  102.  * where this is not the case, use bcmp instead.  Note that like
  103.  * bcmp, we return zero if they are the SAME.
  104.  */
  105. #if defined(sun2) || defined(sun3)
  106. /*
  107.  * On 680x0 machines, we can do a longword compare that is NOT
  108.  * longword aligned, as long as it is even aligned.
  109.  */
  110. #define ether_cmp(a,b) ( ((short *)a)[2] != ((short *)b)[2] || \
  111.   *((long *)a) != *((long *)b) )
  112. #endif
  113.  
  114. /*
  115.  * On a sparc, functions are FAST
  116.  */
  117. #if defined(sparc)
  118. #define ether_cmp(a,b) (sparc_ether_cmp((short *)a, (short *)b))
  119. #endif 
  120.  
  121. #ifndef ether_cmp
  122. #define ether_cmp(a,b) (bcmp((caddr_t)a,(caddr_t)b, 6))
  123. #endif
  124.  
  125. /*
  126.  * Copy Ethernet addresses from a to b - assumes that the two given
  127.  * pointers can be referenced as shorts.  On architectures
  128.  * where this is not the case, use bcopy instead.
  129.  */
  130. #if defined(sun2) || defined(sun3)
  131. #define ether_copy(a,b) { ((long *)b)[0]=((long *)a)[0]; \
  132.  ((short *)b)[2]=((short *)a)[2]; }
  133. #endif
  134.  
  135. #if defined(sparc)
  136. #define ether_copy(a,b) { ((short *)b)[0]=((short *)a)[0]; \
  137.  ((short *)b)[1]=((short *)a)[1]; ((short *)b)[2]=((short *)a)[2]; }
  138. #endif
  139.  
  140. #ifndef ether_copy
  141. #define ether_copy(a,b) (bccopy((caddr_t)a,(caddr_t)b, 6))
  142. #endif
  143.  
  144. /*
  145.  * Copy IP addresses from a to b - assumes that the two given
  146.  * pointers can be referenced as shorts.  On architectures
  147.  * where this is not the case, use bcopy instead.
  148.  */
  149. #if defined(sun2) || defined(sun3)
  150. #define ip_copy(a,b) { *((long *)b) = *((long *)a); }
  151. #endif
  152.  
  153. #if defined(sparc)
  154. #define ip_copy(a,b) { ((short *)b)[0]=((short *)a)[0]; \
  155.  ((short *)b)[1]=((short *)a)[1]; }
  156. #endif
  157.  
  158. #ifndef ip_copy
  159. #define ip_copy(a,b) (bccopy((caddr_t)a,(caddr_t)b, 4))
  160. #endif
  161.  
  162. #ifdef    KERNEL
  163. struct    ether_addr etherbroadcastaddr;
  164. struct    arptab *arptnew();
  165. char *ether_sprintf();
  166. #endif    KERNEL
  167.  
  168. #endif    _IF_ETHER_
  169.